맨위로가기

DragonFly BSD

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

DragonFly BSD는 x86-64 플랫폼에 최적화된 유닉스 계열의 운영 체제이다. 커널 메시징 하위 시스템을 통해 시스템 설계를 개선하고, 1:1 사용자 공간 스레딩을 지원하며, CPU 캐시 효율성을 높이는 스레딩 방식을 사용한다. 또한, HAMMER 파일 시스템과 HAMMER2 파일 시스템을 지원하며, 패키지 관리를 위해 `pkgng` 및 DPorts를 제공한다. 가상 커널 기능을 통해 사용자 공간에서 다른 커널을 실행할 수 있으며, 다양한 기능을 지속적으로 추가하고 성능을 개선해 왔다.

더 읽어볼만한 페이지

  • FreeBSD - TrueOS
    TrueOS는 2005년 PC-BSD로 시작하여 FreeBSD를 기반으로 사용 편의성을 강조한 운영 체제이며, 2016년 TrueOS로 이름이 변경되었으나 2020년에 개발이 중단되었다.
  • FreeBSD - 적재 가능 커널 모듈
    적재 가능 커널 모듈은 운영 체제 커널의 기능을 확장하거나 수정하기 위해 사용되며, 메모리 효율성, 시스템 유지보수, 개발 편의성을 제공하지만, 성능 저하, 보안 취약성, 호환성 문제 등의 단점도 존재한다.
  • BSD - BSD 데몬
    BSD 데몬은 BSD 운영 체제를 상징하는 마스코트 캐릭터이며, 1976년 필 포글리오가 처음 그렸고, 존 라세터가 그린 버전이 널리 사용되며, 유닉스 시스템의 다양한 곳에 활용된다.
  • BSD - NeXTSTEP
    NeXTSTEP은 NeXT에서 개발한 마하 커널 기반의 유닉스 계열 운영 체제로, BSD 소스 코드를 포함하며 디스플레이 포스트스크립트, 독점적인 창 관리 엔진, Objective-C 언어 및 런타임 환경을 제공하고 현대적인 운영체제 인터페이스 발전에 기여하여 macOS의 기반이 되었으며 최초의 웹 브라우저와 앱 스토어 개발에 영향을 미쳤다.
  • X86 운영 체제 - 파이어폭스 OS
    모질라 재단에서 개발한 파이어폭스 OS는 웹 기술을 기반으로 애플리케이션을 구동하는 오픈 소스 모바일 운영 체제였으나, 스마트폰 시장 진출 후 개발이 종료되었고, 이후 스마트 TV 등으로 확장을 시도했으나 프로젝트는 단종되었다.
  • X86 운영 체제 - BeOS
    BeOS는 1990년대 Be사에서 개발한 운영 체제로, 대칭형 멀티프로세싱, 선점형 멀티태스킹, 멀티스레딩을 특징으로 하며 멀티미디어 처리 능력이 뛰어났으나, 시장 경쟁에서 밀려 개발이 중단되었고 이후 Haiku 프로젝트로 계승되었다.
DragonFly BSD - [IT 관련 정보]에 관한 문서
기본 정보
DragonFly BSD 로고
DragonFly BSD 로고
DragonFly BSD 6.2.1 UEFI 부트 로더
DragonFly BSD 6.2.1 UEFI 부트 로더
개발
개발자매튜 딜런(Matthew Dillon)
개발 상태현재 개발 중
소스 모델오픈 소스
출시
초기 출시1.0 /
최신 버전6.4.0
기술 정보
계열유닉스 계열 (BSD)
사용 언어영어
패키지 관리자pkg
지원 플랫폼x86-64
커널 유형하이브리드 커널
사용자 영역BSD
사용자 인터페이스유닉스 셸
라이선스BSD
기타
웹사이트DragonFly BSD 공식 웹사이트

2. 시스템 설계

DragonFly BSD는 하이브리드 커널을 채택하여 모놀리식 커널마이크로커널의 장점을 모두 활용한다. 이는 메시징 하위 시스템을 통해 커널의 여러 부분을 사용자 공간에서 실행 가능하게 하여 시스템 안정성을 높인다. 시스템 호출은 유저랜드 버전과 커널랜드 버전으로 나뉘어 메시지로 캡슐화되어 표준 시스템 호출의 실체를 유저랜드의 호환 레이어로 옮겨 프로그램 양과 복잡성을 줄이고, DragonFly BSD의 호환성 유지를 용이하게 한다. 또한 Linux 및 기타 UNIX 계열 OS의 애플리케이션 실행 구조도 유저랜드로 옮길 수 있다.

2. 1. 커널

커널 메시징 하위 시스템은 Mach와 같은 마이크로커널에서 발견되는 것과 유사하게 개발되고 있지만, 설계상 덜 복잡하다. DragonFly의 메시징 하위 시스템은 동기 또는 비동기 방식으로 작동할 수 있으며, 주어진 상황에서 가능한 최상의 성능을 달성하기 위해 이 기능을 사용하려고 시도한다.

개발자 매튜 딜런에 따르면, 장치 입출력(I/O) 및 가상 파일 시스템 (VFS) 메시징 기능을 제공하여 나머지 프로젝트 목표를 달성할 수 있도록 진전이 이루어지고 있다. 새로운 인프라는 커널의 많은 부분을 사용자 공간으로 마이그레이션할 수 있도록 한다. 여기서 더 작고 격리된 프로그램이므로 더 쉽게 디버깅할 수 있으며, 더 큰 코드 덩어리에 얽혀 있는 작은 부분으로 존재하지 않는다. 또한, 일부 커널 코드를 사용자 공간으로 마이그레이션하면 시스템의 견고성이 향상되는 이점이 있다. 사용자 공간 드라이버가 충돌하더라도 커널이 충돌하지 않는다.

시스템 호출은 사용자 공간 및 커널 버전으로 분할되어 메시지로 캡슐화된다. 이렇게 하면 표준 시스템 호출의 변형을 사용자 공간 호환성 계층으로 이동하여 커널의 크기와 복잡성을 줄이고, DragonFly 버전 간의 정방향 및 역방향 호환성을 유지하는 데 도움이 된다. 리눅스 및 기타 유닉스 계열 OS 호환성 코드도 유사하게 마이그레이션되고 있다.

2. 2. 스레딩

DragonFly BSD는 현재 x86-64 플랫폼을 지원한다. 버전 1.10부터 1:1 사용자 공간 스레딩(사용자 스레드당 하나의 커널 스레드)을 지원하는데, 이는 유지 관리가 용이한 비교적 간단한 솔루션으로 간주된다.

DragonFly에서 각 CPU는 자체 스레드 스케줄러를 가진다. 스레드는 생성 시 프로세서에 할당되며, 프로세서 간 인터럽트 (IPI) 메시지 전달에 의해서만 다른 프로세서로 마이그레이션된다. 프로세서 간 스레드 스케줄링은 비동기 IPI 메시지를 전송하여 수행된다. 이러한 설계는 대칭형 멀티 프로세서 시스템에서 프로세서의 온보드 캐시가 중복된 데이터를 포함하지 않도록 하여 성능을 높인다.

LWKT 하위 시스템은 여러 커널 스레드 간에 작업을 분할하는 데 사용된다. 예를 들어, 네트워킹 코드에서는 프로세서당 프로토콜당 하나의 스레드가 있어 여러 커널 작업 간에 특정 리소스를 공유할 필요성을 제거하여 경쟁을 줄인다.

LWKT 서브시스템에서는 여러 커널 스레드에 처리를 분산하도록 구현되었다.[6] 이에 따라 여러 커널 내 작업에서 리소스를 공유함으로써 발생하는 경합 상태를 없앨 수 있다. 이처럼 CPU별 국소성을 유지하도록 하는 알고리즘으로 스레드를 분리하는 구현은 DragonFly BSD에 특유한 디자인이다.

시스템 콜과 장치I/O의 구현은 DragonFly BSD의 스레드 메시징 시스템을 사용하도록 변경되었지만, 아직 동기적으로 동작하고 있다. 최종적으로는 모든 메시지 서브 시스템을 동기 또는 비동기 중 어느 쪽으로든 동작하도록 할 예정이다.

유저랜드 스레드의 지원 또한 향후 릴리스의 중요한 과제이다. DragonFly BSD에서는 현재 N:1 스레드만 가지고 있다. 이에 대해서는 개발 초창기부터 대응해 왔으며, 현대적인 스레드 구현이 될 예정이다.[14]

2. 3. 공유 자원 보호

다중 프로세서 시스템에서 안전하게 실행하기 위해, 파일, 데이터 구조와 같은 공유 자원에 대한 접근은 직렬화되어야 하며, 스레드 또는 프로세스가 동시에 동일한 자원을 수정하려는 시도를 하지 않도록 해야 한다. DragonFly는 여러 스레드가 동시에 공유 자원에 접근하거나 수정하는 것을 방지하기 위해 크리티컬 섹션과 직렬화 토큰을 사용하여 동시 접근을 방지한다. Linux와 FreeBSD 5는 모두 멀티프로세서 시스템에서 더 높은 성능을 얻기 위해 세분화된 뮤텍스 모델을 사용하지만, DragonFly는 그렇지 않다. 최근까지 DragonFly는 spl도 사용했지만, 이는 크리티컬 섹션으로 대체되었다.

LWKT 서브시스템, IPI 메시징 서브시스템, 새로운 메모리 할당자 등을 포함한 시스템 코어의 대부분은 락이 없는 방식으로 작동하며, 각 CPU가 단일 CPU에서 작동한다. 크리티컬 섹션은 각 CPU에 대해 개별적으로 로컬 인터럽트를 보호하는 데 사용되어 현재 실행 중인 스레드가 선점되지 않도록 보장한다.

직렬화 토큰은 다른 CPU로부터의 동시 접근을 방지하는 데 사용되며 여러 스레드가 동시에 보유할 수 있으며, 해당 스레드 중 하나만 주어진 시간에 실행되도록 보장한다. 따라서 차단되거나 슬립 상태인 스레드는 뮤텍스를 보유한 스레드와 달리 다른 스레드가 공유 자원에 접근하는 것을 방해하지 않는다. 무엇보다도, 직렬화 토큰을 사용하면 뮤텍스를 사용할 때 교착 상태 및 우선 순위 역전이 발생할 수 있는 많은 상황을 방지할 수 있으며, 여러 스레드 간에 공유되어야 하는 자원이 필요한 여러 단계의 절차 설계 및 구현을 크게 단순화한다. 직렬화 토큰 코드는 현재 Linux에서 사용할 수 있는 "읽기-복사-수정" 기능과 매우 유사하게 발전하고 있다. Linux의 현재 RCU 구현과 달리 DragonFly의 RCU는 컴퓨터의 모든 프로세서가 아닌 동일한 토큰을 놓고 경쟁하는 프로세서만 영향을 받도록 구현되고 있다.

2. 4. 가상 커널

DragonFly BSD 1.8 릴리스부터 유저 모드 리눅스와 비슷한 가상화 메커니즘을 갖추어 사용자가 유저랜드에서 다른 커널을 실행할 수 있게 되었다. 가상 커널(vkernel)은 에뮬레이션된 네트워크 및 스토리지 인터페이스를 통해 완전히 격리된 환경에서 실행되므로 커널 서브시스템과 클러스터링 기능을 테스트하는 것이 단순화된다.

vkernel은 실제 커널과 두 가지 중요한 차이점이 있다. 첫째, 로우 레벨 하드웨어 관리를 처리하는 많은 루틴이 없다. 둘째, 가능하면 커널 내 구현 대신 C 표준 라이브러리(libc) 함수를 사용한다. 실제 커널과 가상 커널 모두 동일한 코드 베이스에서 컴파일되므로 플랫폼 종속 루틴과 libc 함수의 재구현이 소스 트리에서 명확하게 분리된다.

vkernel은 실제 커널에서 제공하는 하드웨어 추상화 계층 위에서 실행된다. 여기에는 kqueue 기반 타이머, 콘솔(vkernel이 실행되는 가상 터미널에 매핑됨), 디스크 이미지 및 가상 커널 이더넷 장치(VKE)가 포함되며, 모든 패킷은 호스트의 tap 인터페이스로 터널링한다.

3. 패키지 관리

DragonFly BSD는 바이너리 패키지 관리를 위해 `pkgng` 또는 네이티브 포트 컬렉션인 DPorts를 제공한다.[12]

초기 DragonFly BSD는 FreeBSD의 ports를 패키지 관리 시스템으로 사용했으며, NetBSD의 pkgsrc는 선택 사항으로만 사용할 수 있었다. 그러나 1.4 릴리스부터 pkgsrc가 시스템의 공식적인 패키지 관리 시스템이 되었다.[12] 이는 개발자가 추가로 설치되는 소프트웨어의 업데이트 작업 부담을 줄여주었다. 또한, 이 변경은 pkgsrc 개발자가 pkgsrc의 이식성을 높이는 데에도 도움이 되었다.

하지만 pkgsrc와의 호환성을 유지하는 데 예상보다 많은 노력이 필요했고, 결국 프로젝트는 FreeBSD Ports 컬렉션 위에 DPorts를 만들었다. DragonFly BSD 3.4부터는 새로운 패키지 관리 시스템으로 DPorts가 도입되었다.[13] DPorts는 FreeBSD의 ports를 DragonFly BSD에서 사용할 수 있도록 하는 시스템이지만, pkgsrc와 DPorts를 동시에 사용할 수는 없다.

4. 파일 시스템

유닉스 파일 시스템과 더불어, 일반적으로 BSD에서 기본 파일 시스템으로 사용되며, DragonFly BSD는 HAMMER 및 HAMMER2 파일 시스템을 지원한다. HAMMER2는 DragonFly BSD 5.2.0부터 기본 파일 시스템이다.[15]

HAMMER는 점점 인기를 얻고 있는 ZFS와 유사하게 기능이 풍부하면서도 더 나은 설계를 제공하기 위해 DragonFly BSD를 위해 특별히 개발되었다. HAMMER는 구성 가능한 파일 시스템 히스토리, 스냅샷, 체크섬, 데이터 중복 제거 및 이와 유사한 파일 시스템의 다른 기능을 지원한다.

HAMMER 파일 시스템의 후속 버전인 HAMMER2는 현재 안정적인 것으로 간주되며, 기본적으로 사용되고 있으며, 추가 개발의 초점이다. 2017년 매튜 딜런(Matthew Dillon)은 차기 DragonFly BSD 버전(5.0.0)에 HAMMER2의 사용 가능한 버전(아직 실험적이지만)을 포함시키고 설계의 기능을 설명한다고 발표했다. DragonFly BSD 5.2.0에서 HAMMER2가 새로운 기본 파일 시스템이 되었다.

5. 기타 기능

DragonFly BSD는 다음과 같은 기타 기능들을 제공한다.


  • devfs: 2007년 구글 서머 오브 코드 2009 프로젝트를 통해 구현된 새로운 장치 파일 시스템(devfs)이다. devfs는 장치 노드를 동적으로 추가 및 제거하고, 연결 경로를 통해 장치에 접근하며, 시리얼 넘버로 드라이브를 인식하여 미리 채워진 `/dev` 파일 시스템 계층 구조가 필요 없도록 한다.
  • 애플리케이션 스냅샷: 아미가 스타일의 '상주 애플리케이션' 기능을 지원한다. 이 기능은 크고 동적으로 연결된 프로그램의 가상 메모리 공간 스냅샷을 생성하여 프로그램 시작 속도를 향상시킨다. 이는 프리링크 기능을 대체하며, KDE 소프트웨어 컴파일레이션과 같이 많은 공유 라이브러리를 사용하는 대규모 프로그램에 유용하다.
  • CARP 지원: 공통 주소 중복 프로토콜(CARP)을 지원하여 네트워크 이중화를 제공한다. CARP의 초기 구현은 2007년 3월에 완료되었으며, 2011년에 DragonFly BSD에 통합되었다.
  • PUFFS: NetBSD에서 PUFFS(Pass-to-Userspace Framework File System)가 포팅되었다.
  • USB4BSD: FreeBSD에서 USB4BSD가 포팅되었다.
  • 아키텍처 지원: 4.0.1 버전부터 i386 아키텍처(32비트 x86) 지원이 중단되어 x86_64 버전만 지원한다.[16]

6. 개발 및 배포

FreeBSDOpenBSD와 마찬가지로, DragonFly BSD 개발자들은 C 언어 코드를 초기 함수 원형 스타일에서 더 현대적인 ANSI 표준으로 점진적으로 바꾸고 있다. 다른 운영 체제들과 마찬가지로, DragonFly의 GNU 컴파일러 모음 버전은 기본적으로 스택 스매싱 프로텍터(ProPolice) 기능이 활성화되어 있어 버퍼 오버플로우 기반 공격에 대한 추가적인 보호를 제공한다. 그러나 2005년 7월 23일부터 이 보호 기능이 포함된 커널 빌드는 기본적으로 제공되지 않는다.

FreeBSD에서 파생된 DragonFly는 몇 가지 명령만으로 소스에서 전체 기본 시스템을 다시 빌드할 수 있는 사용하기 쉬운 통합 빌드 시스템을 상속받았다. DragonFly 개발자들은 Git 버전 관리 시스템을 사용하여 DragonFly 소스 코드 변경 사항을 관리한다. 상위 시스템인 FreeBSD와 달리, DragonFly는 개발자 기반이 작기 때문에 단일 소스 트리에 안정 및 불안정 릴리스를 모두 가지고 있다.

다른 BSD 커널(및 대부분의 최신 운영 체제)과 마찬가지로 DragonFly는 개발자가 커널 버그를 찾는 데 도움을 주는 내장 커널 디버거를 사용한다. 또한 2004년 10월부터 커널 관련 문제 추적에 유용한 버그 보고서를 제공하는 디버그 커널이 디스크 공간을 비교적 적게 사용하면서 기본적으로 설치된다. 새로운 커널이 설치되면 이전 커널과 해당 모듈의 백업 사본에서 디버깅 기호를 제거하여 디스크 공간 사용량을 더욱 최소화한다.

운영 체제는 완전한 DragonFly 시스템으로 부팅되는 라이브 CD라이브 USB로 배포된다. 여기에는 기본 시스템과 전체 매뉴얼 페이지가 포함되어 있으며, 향후 버전에서는 소스 코드와 유용한 패키지가 포함될 수 있다. 이는 사용자가 단일 CD로 컴퓨터에 소프트웨어를 설치하고, 손상된 설치를 복구하기 위한 전체 도구 세트를 사용하거나, 설치하지 않고도 시스템의 기능을 시연할 수 있다는 장점을 제공한다. 소스에서 빌드하지 않고 최신 버전의 DragonFly를 설치하려는 사용자를 위해 매일 스냅샷이 마스터 사이트에서 제공된다.

다른 자유-오픈 소스 BSD와 마찬가지로 DragonFly는 최신 버전의 BSD 라이선스 조건에 따라 배포된다.

7. 릴리스 기록

DragonFly BSD는 지속적으로 발전해 왔으며, 각 릴리스마다 새로운 기능 추가 및 성능 개선이 이루어졌다. 주요 릴리스는 다음과 같다:

버전날짜주요 변경 사항
6.42022년 12월 30일
6.2.12022년 1월 9일
6.02021년 5월 10일
5.82020년 3월 3일
5.62019년 6월 17일
5.42018년 12월 3일
5.22018년 4월 10일
5.02017년 10월 16일
4.82017년 3월 27일
4.62016년 8월 2일
4.42015년 12월 7일
4.22015년 6월 29일
4.02014년 11월 25일
3.82014년 6월 4일
3.62013년 11월 25일
3.42013년 4월 29일
3.22012년 11월 2일
3.02012년 2월 22일
2.102011년 4월 26일
2.82010년 10월 30일
2.62010년 4월 6일
2.42009년 9월 16일
2.22009년 2월 17일
2.02008년 7월 20일
1.122008년 2월 26일
1.102007년 8월 6일
1.82007년 1월 30일
1.62006년 7월 24일
1.42006년 1월 7일
1.22005년 4월 8일
1.02004년 7월 12일


참조

[1] 웹사이트 DragonFly BSD 6.4 https://www.dragonfl[...] 2023-01-15
[2] 웹사이트 "Re: DragonFly-2.3.1.165.g25822 master sys/dev/disk/ahci Makefile TODO ahci.c ahci.h ahci_attach.c ahci_cam.c ahci_dragonfly.c ahci_dragonfly.h atascsi.h" http://www.dragonfly[...] 2009-06-04
[3] 웹사이트 https://www.dragonfl[...]
[4] 웹사이트 DragonFly-1.0 RELEASED! http://lists.dragonf[...] 2004-07-12
[5] 웹사이트 UEFIをサポートした「DragonFly BSD 4.8」リリース https://mag.osdn.jp/[...] OSDN Corporation 2017-06-21
[6] 문서 네트워크 코드에서 프로토콜별 1스레드 사용
[7] 웹사이트 sfbuf.h https://github.com/D[...] 2011-02-14
[8] 웹사이트 SENDFILE(2) http://leaf.dragonfl[...] 2014-08-22
[9] 웹사이트 xio.h https://raw.githubus[...] 2009-09-19
[10] 웹사이트 SENDFILE(2) http://www.freebsd.o[...] 2014-08-22
[11] 웹사이트 https://www.dragonfl[...]
[12] 웹사이트 PKGSRC will be officially supported as of the next release http://lists.dragonf[...] 2005-09-01
[13] 웹사이트 An introduction to DPorts http://lists.dragonf[...] 2013-01-02
[14] 문서 Matthew Dillon의 M:N 스레드 구현에 대한 언급
[15] 웹사이트 hammer http://www.dragonfly[...] 2014-08-23
[16] 웹사이트 「DragonFly BSD 4.0」リリース、32ビット対応を廃止しx86_64のみをサポート https://mag.osdn.jp/[...] OSDN Corporation 2016-08-01
[17] 웹인용 DragonFly BSD 6.4 https://www.dragonfl[...] 2023-01-15
[18] 인용 DragonFly BSD License //www.dragonflybsd.o[...] 2015-01-17



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com